import { open } from "@tauri-apps/api/dialog";
import { FopApi } from "@/lib/api";

/**
 * 弹出选择 MIDI 文件 或 文件夹 的模态窗口，选择完成后返回文件路径数组
 * @param openDir 是否是打开目录
 * @returns 文件路径数组
 */
export async function selectMidiFiles(openDir: boolean): Promise<string[]> {
    // 调用 open 函数选择多个文件，并根据是否打开目录设置参数
    const selecteds = await open({
        multiple: true,
        directory: openDir,
        filters: [
            {
                name: "Midi 文件",
                extensions: ["mid", "midi"],
            },
        ],
    });

    // 如果选择的文件为 null，则返回空数组
    if (selecteds === null) {
        return [];
    }

    // 声明一个 Midi 文件数组
    let midiFiles: string[];

    // 如果 selecteds 是数组
    if (Array.isArray(selecteds)) {
        // 如果打开目录为 true，则通过 glob 获取选中目录下的所有 mid 和 midi 文件
        if (openDir) {
            midiFiles = await FopApi.glob(selecteds.flatMap((e) => [e + "/*.mid", e + "/*.midi"]));
        } else {
            midiFiles = selecteds;
        }
    } else {
        // 如果打开目录为 true，则通过 glob 获取选中目录下的所有 mid 和 midi 文件
        if (openDir) {
            midiFiles = await FopApi.glob([selecteds + "/*.mid", selecteds + "/*.midi"]);
        } else {
            midiFiles = [selecteds];
        }
    }

    // 返回 Midi 文件数组
    return midiFiles;
}
